package com.cloudkinto.service.company.vo;

/**
 * 退货入库单状态枚举
 *
 * @author long
 */

public enum ReturnOrderStatusEnum {

    /**
     * 退货入库单状态枚举
     */
    CREATED(20, "退货单接单成功", "收到创建请求，处理成功后的返回状态"),
    Processing(30, "退货处理中", "仓库收到包裹后的开始处理状态，通过状态推送接口回推给 temu"),
    ProcessComplete(40, "退货处理完成", "退货入库单处理完成，通过状态推送接口回推给 temu"),
    UpdateSuccess(60, "退货单更新成功", "收到更新请求，更新成功的返回状态"),
    UpdateFailure(65, "退货单更新失败", "收到更新请求，更新失败的返回状态"),
    CancelTheOrderSuccessful(
            70,
            "退货单取消接单成功",
            "收到取消请求，处理成功后的返回状态（该步骤为异步，如果内部能直接处理，也可以直接返回”取消成功“或”取消失败“状态）"
    ),
    CancelFailure(75, "退货单取消失败", "入库单取消失败，可以直接返回，也可以通过状态推送接口回推给 temu"),
    CancelSuccessful(80, "退货单取消成功", "入库单取消成功，可以直接返回，也可以通过状态推送接口回推给 temu"),
    Exception(99, "退货单异常（带原因）", "异常状态，根据 errorCode，errorMsg 区分具体异常场景和异常原因");

    private final Integer code;

    private final String msg;

    private final String desc;

    ReturnOrderStatusEnum(Integer code, String msg, String desc) {
        this.code = code;
        this.msg = msg;
        this.desc = desc;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public String getDesc() {
        return desc;
    }

    /**
     * 根据本地退货入库状态获取temu退货状态code
     */
    public static Integer getCodeByLocationStatus(Integer locationStatus) {
        switch (locationStatus) {
            case 1:
                return ReturnOrderStatusEnum.Processing.getCode();
            case 2:
            case 3:
                return ReturnOrderStatusEnum.ProcessComplete.getCode();
            case 4:
                return ReturnOrderStatusEnum.CancelSuccessful.getCode();
            case 0:
            default:
                return ReturnOrderStatusEnum.CREATED.getCode();
        }
    }
}
